/*
    空洞文件测试，空洞文件到形成，以及读取空洞文件时会发生什么
*/

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdio.h>
#include<errno.h>
#include<stdlib.h>

int main(void)
{
    int fd;
    int ret;
    char buf[1024];
    int i;

    /*打开文件*/
    fd = open("./hole_file",O_WRONLY|O_CREAT|O_EXCL,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
    if (-1 == fd) 
    {
        perror("open error");
        exit(-1);
    }

    /*将文件的读写位置移动到偏移头文件4096个字节（4K）处*/
    ret = lseek(fd,4096,SEEK_SET);
    if (-1 == ret)
    {
        perror("lseek error");
        goto err;
    }

    /*初始化buf为0XFF*/
    memset(buf,0XFF,sizeof(buf));

    /*循环写入四次，每次写入1K*/
    for ( i = 0; i < 4; i++)
    {
        ret = write(fd,buf,sizeof(buf));
        if (-1 == ret)
        {
            perror("write error");
            goto err;
        }
        
    }

    ret = 0;
    err:
        /*关闭文件*/
        close(fd);
        exit(ret);
    
    
    
}